function fillRed(x, y){
	getMapCell(x, y).style.backgroundColor = "#F00";
}
function fillYellow(x, y){
	if(getMapCell(x, y).style.backgroundColor == "" || getMapCell(x, y).style.backgroundColor == "#FFF" || getMapCell(x, y).style.backgroundColor == "rgb(255, 255, 255)"){
		getMapCell(x, y).style.backgroundColor = "#FF0";
	}
}
const LAYER_RHS = 0;
const LAYER_G = 1;
const LAYER_H = 2;
const LAYER_F = 3;
function setCellInformation(x, y, info, value){
	var valueText = "";
	if(value == INFINITY){
		valueText = "∞";
	} else if(value != ""){
		valueText = "" + getExactNumDigits(value, 2);
	}
	var cellChildren = getMapCell(x, y).children;	
	cellChildren[0].children[info].innerHTML = valueText;
}
function setRHS(x, y, value){
	setCellInformation(x, y, LAYER_RHS, value);
}
function setG(x, y, value){
	setCellInformation(x, y, LAYER_G, value);
}
function setH(x, y, value){
	setCellInformation(x, y, LAYER_H, value);
}
function setF(x, y, value){
	setCellInformation(x, y, LAYER_F, value);
}
function initHValue(x, y){
	var f = document.getElementById("mapTable").children[0];
	for(var i=0; i<m; ++i){
		var row = f.children[i+1];
		for(var j=0; j<n; ++j){
			var cell = row.children[j+1];
			var l = cell.children.length;
			if(l>0){
				map[i][j].heuristic = heuristicFunction(map[i][j], map[x][y]);
				if(terrain[i][j] == 0){
					cell.children[0].children[LAYER_H].innerHTML = "" + getExactNumDigits(map[i][j].heuristic, 2);
				}
			}
		}
	}
	heuristicWasInitialized = true;
}
function showLayer(initHOrNot){
	if(document.route.toX.value != "-1" && document.route.toY.value != "-1" && initHOrNot == true){		
		initHValue(eval(document.route.toX.value), eval(document.route.toY.value));
	}
	
	var f = document.getElementById("mapTable").children[0];
	for(var i=0; i<m; ++i){
		var row = f.children[i+1];
		for(var j=0; j<n; ++j){
			var cell = row.children[j+1];			
			var l = cell.children.length;
			if(l>0 && terrain[i][j]==0){
				cell.children[0].style.display = "block";
			}
		}
	}
}
function hideLayer(){
	var f = document.getElementById("mapTable").children[0];
	for(var i=0; i<m; ++i){
		var row = f.children[i+1];
		for(var j=0; j<n; ++j){
			var cell = row.children[j+1];			
			var l = cell.children.length;
			if(l>0 && terrain[i][j]==0){
				cell.children[0].style.display = "none";
			}
		}
	}
}
function showHideLayer(btn){
	if(btn.value == "Hiển thị thông tin"){
		btn.value = "Ẩn thông tin";
		showLayer(true);
	} else {
		btn.value = "Hiển thị thông tin";
		hideLayer();
	}
}
function showHideDijkstraCost(btn){
	if(btn.value == "Hiển thị thông tin"){
		btn.value = "Ẩn thông tin";
		showLayer(false);
	} else {
		btn.value = "Hiển thị thông tin";
		hideLayer();
	}
}
function searchBtnOnclickFunc(btn){
	var f = document.route;
	var fx = eval(f.fromX.value);
	var fy = eval(f.fromY.value);
	var tx = eval(f.toX.value);
	var ty = eval(f.toY.value);	
	if(fx==-1 || fy==-1 || tx==-1 || ty==-1){
		alert("Xin vui lòng chọn điểm bắt đầu và điểm kết thúc!");
	} else {		
		search();
		btn.disabled='disabled';
	}
}
function attachLayerButton(){
	var btn = Node("input", new Array("type", "button", "id", "layerBtn", "value", "Hiển thị thông tin", "style", "z-index: 11; position: fixed; top: 0px; right: 0px;", "onclick", "showHideLayer(this);"));
	document.body.appendChild(btn);
}
attachLayerButton();